package com.lb.mq;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
 
/**
 * 接收者客户端
 * @author pan_junbiao
 **/
public class RabbitConsumer
{
    private static final String QUEUE_NAME = "queue_demo";
    private static final String IP_ADDRESS = "127.0.0.1";
    private static final int PORT = 5672; //RabbitMQ 服务端默认端口号为 5672
    private static final String USER_NAME = "guest";
    private static final String PASSWORD = "guest";
 
    public static void main(String[] args) throws IOException, TimeoutException,InterruptedException
    {
        Address[] addresses = new Address[]{new Address(IP_ADDRESS, PORT)};
        ConnectionFactory factory = new ConnectionFactory();
        factory.setUsername(USER_NAME);
        factory.setPassword(PASSWORD);
        Connection connection = factory.newConnection(addresses); //创建连接
        final Channel channel = connection.createChannel(); //创建信道
        channel.basicQos(64); //设置客户端最多接收未被ack的消息的个数
        Consumer consumer = new DefaultConsumer(channel)
        {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException
            {
                String msg = new String(body);
                System.out.println("接收信息：" + msg);
                try
                {
                    TimeUnit.SECONDS.sleep(1);
                }
                catch (InterruptedException ie)
                {
                    ie.printStackTrace();
                }
//                channel.basicAck(envelope.getDeliveryTag(), false);

                if (msg.contains("110")) {
                    try {
                        channel.close();
                        connection.close();
                    } catch (TimeoutException e) {
                        throw new RuntimeException(e);
                    }
                }
            }
        };
        channel.basicConsume(QUEUE_NAME, true, consumer);
        //等待回调函数执行完毕之后，关闭资源
//        TimeUnit.SECONDS.sleep(5);
//        channel.close();
//        connection.close();
    }
}